Skip to content

config endpoint must handle functions in module configs#4106

Merged
sdetweil merged 2 commits intoMagicMirrorOrg:developfrom
khassel:config
Apr 12, 2026
Merged

config endpoint must handle functions in module configs#4106
sdetweil merged 2 commits intoMagicMirrorOrg:developfrom
khassel:config

Conversation

@khassel
Copy link
Copy Markdown
Collaborator

@khassel khassel commented Apr 12, 2026

Fixes #4105

In JavaScript, standard JSON does not support functions.
If you use JSON.stringify() on an object containing functions,
those functions will be omitted (if they are object properties)
or changed to null (if they are in an array).

@KristjanESPERANTO
Copy link
Copy Markdown
Collaborator

Smart solution! I noticed some small polish points around the function-tagging flow on the server/client side (plus one small edge-case test for plain strings).

Would you be okay with me adding a follow-up commit to your branch? Would be easier than commenting.

@khassel
Copy link
Copy Markdown
Collaborator Author

khassel commented Apr 12, 2026

Sure

Replace heuristic string detection for function revival with an
explicit __mmFunction tag to avoid false positives for plain text
containing "function" or "=>".

Add comments clarifying the server/client serialization contract and
extend e2e coverage to ensure normal strings are not revived.
@KristjanESPERANTO
Copy link
Copy Markdown
Collaborator

Just pushed a commit: functions are now explicitly marked during serialization instead of guessed, which should make the flow safer and prevents false positives on plain strings.

What do you think?

@khassel
Copy link
Copy Markdown
Collaborator Author

khassel commented Apr 12, 2026

I'm fine with this. I'm not a JavaScript expert anyway, so I would never have come up with that idea...

Since we both worked on this, it should be merged by @rejas or @sdetweil .

@sdetweil sdetweil merged commit d3a3ad9 into MagicMirrorOrg:develop Apr 12, 2026
12 checks passed
@khassel khassel deleted the config branch April 12, 2026 21:06
@khassel khassel mentioned this pull request Apr 30, 2026
khassel added a commit that referenced this pull request Apr 30, 2026
## Release Notes
Thanks to: @cgillinger, @khassel, @KristjanESPERANTO, @sonnyb9
> ⚠️ This release needs nodejs version >=22.21.1 <23 || >=24 (no change
to previous release)

[Compare to previous Release
v2.35.0](v2.35.0...v2.36.0)

This release falls outside the quarterly schedule. We opted for an early
release due to:
- Security fix for the internal cors proxy
- API change of the weather provider smi
- Several bug fixes

### Breaking Changes

The cors proxy is now disabled by default. If required, it must be
explicitly enabled in the `config.js` file. See the
[documentation](https://docs.magicmirror.builders/configuration/cors.html).

### ⚠️ Security

You can find several publicly accessible MagicMirror² instances.

This should never be done. Doing so makes your entire configuration,
including secrets and API keys, publicly visible. Furthermore, it allows
attackers to target the host; this is only prevented beginning with this
release.

Public MagicMirror² instances should always run behind a reverse proxy
with authentication.

### [core]
- Prepare Release 2.36.0 (#4126)
- Allow HTTPFetcher to pass through 304 responses (#4120)
- fix(http-fetcher): fall back to reloadInterval after retries exhausted
(#4113)
- config endpoint must handle functions in module configs (#4106)
- fix replaceSecretPlaceholder (#4104)
- restrict replaceSecretPlaceholder to cors with allowWhitelist (#4102)
- fix: prevent crash when config is undefined in socket handler (#4096)
- fix cors function for alpine linux (#4091)
- fix(cors): prevent SSRF via DNS rebinding (#4090)
- add option to disable or restrict cors endpoint (#4087)
- fix: prevent SSRF via /cors endpoint by blocking private/reserved IPs
(#4084)
- chore: add permissions section to enforce pull-request rules workflow
(#4079)
- update version for develop

### [dependencies]
- update dependencies (#4124)
- chore: update dependencies (#4088)
- refactor: enable ESLint rule "no-unused-vars" and handle related
issues (#4080)

### [modules/newsfeed]
- fix(newsfeed): prevent duplicate parse error callback when using
pipeline (#4083)

### [modules/updatenotification]
- fix(updatenotification): harden git command execution + simplify
checkUpdates (#4115)
- fix(tests): correct import path for git_helper module in
updatenotification tests (#4078)

### [modules/weather]
- fix(weather): use nearest openmeteo hourly data (#4123)
- fix(weather): avoid loading state after reconnect (#4121)
- weather: fix UV index display and add WeatherFlow precipitation
(#4108)
- fix(weather): restore OpenWeatherMap v2.5 support (#4101)
- fix(weather): use stable instanceId to prevent duplicate fetchers
(#4092)
- SMHI: migrate to SNOW1gv1 API (replace deprecated PMP3gv2) (#4082)

### [testing]
- ci(actions): set explicit token permissions (#4114)
- fix(http_fetcher): use undici.fetch when dispatcher is present (#4097)
- ci(codeql): also scan develop branch on push and PR (#4086)
- refactor: replace implicit global config with explicit global.config
(#4085)

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: sam detweiler <sdetweil@gmail.com>
Co-authored-by: Kristjan ESPERANTO <35647502+KristjanESPERANTO@users.noreply.github.com>
Co-authored-by: Veeck <github@veeck.de>
Co-authored-by: veeck <gitkraken@veeck.de>
Co-authored-by: Magnus <34011212+MagMar94@users.noreply.github.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: DevIncomin <56730075+Developer-Incoming@users.noreply.github.com>
Co-authored-by: Nathan <n8nyoung@gmail.com>
Co-authored-by: mixasgr <mixasgr@users.noreply.github.com>
Co-authored-by: Savvas Adamtziloglou <savvas-gr@greeklug.gr>
Co-authored-by: Konstantinos <geraki@gmail.com>
Co-authored-by: OWL4C <124401812+OWL4C@users.noreply.github.com>
Co-authored-by: BugHaver <43462320+bughaver@users.noreply.github.com>
Co-authored-by: BugHaver <43462320+lsaadeh@users.noreply.github.com>
Co-authored-by: Bugsounet - Cédric <github@bugsounet.fr>
Co-authored-by: Koen Konst <koenspero@gmail.com>
Co-authored-by: Koen Konst <c.h.konst@avisi.nl>
Co-authored-by: dathbe <github@beffa.us>
Co-authored-by: Marcel <m-idler@users.noreply.github.com>
Co-authored-by: Kevin G. <crazylegstoo@gmail.com>
Co-authored-by: Jboucly <33218155+jboucly@users.noreply.github.com>
Co-authored-by: Jboucly <contact@jboucly.fr>
Co-authored-by: Jarno <54169345+jarnoml@users.noreply.github.com>
Co-authored-by: Jordan Welch <JordanHWelch@gmail.com>
Co-authored-by: Blackspirits <blackspirits@gmail.com>
Co-authored-by: Samed Ozdemir <samed@xsor.io>
Co-authored-by: in-voker <58696565+in-voker@users.noreply.github.com>
Co-authored-by: Andrés Vanegas Jiménez <142350+angeldeejay@users.noreply.github.com>
Co-authored-by: cgillinger <christian.gillinger@gmail.com>
Co-authored-by: Sonny B <43247590+sonnyb9@users.noreply.github.com>
Co-authored-by: sonnyb9 <sonnyb9@users.noreply.github.com>
KristjanESPERANTO added a commit to KristjanESPERANTO/MMM-CalendarExt3 that referenced this pull request May 1, 2026
MM v2.35.0 broke config callbacks by serving config as JSON,
stripping all functions. v2.36.0 fixed this (MagicMirrorOrg/MagicMirror#4106).

BREAKING CHANGE: requires MagicMirror² ≥ 2.36.0
KristjanESPERANTO added a commit to KristjanESPERANTO/MMM-CalendarExt3Agenda that referenced this pull request May 1, 2026
MM v2.35.0 broke config callbacks by serving config as JSON,
stripping all functions. v2.36.0 fixed this (MagicMirrorOrg/MagicMirror#4106).

BREAKING CHANGE: requires MagicMirror² ≥ 2.36.0
KristjanESPERANTO added a commit to KristjanESPERANTO/MMM-CalendarExt3Journal that referenced this pull request May 1, 2026
MM v2.35.0 broke config callbacks by serving config as JSON,
stripping all functions. v2.36.0 fixed this (MagicMirrorOrg/MagicMirror#4106).

BREAKING CHANGE: requires MagicMirror² ≥ 2.36.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants